文章目录
  1. 1. Softmax 介绍
  2. 2. Logistic回顾
  3. 3. Softmax 模型
  4. 4. Softmax的损失函数
  5. 5. Softmax与Logistic的联系
    1. 5.1. 算分函数
    2. 5.2. 损失函数
  6. 6. 总结
  7. 7. 参考

Softmax 介绍

多分类是机器学习中一类非常常见的任务,比如将0~9某个字写到图片上,使用多分类的方法来识别这个图片上写的到底是几(MNIST手写体识别),对于多分类任务常用的机器学习方法有:

  1. 借助二分类,使用One vs All或者One vs One来完成多分类
  2. 使用朴素贝叶斯来完成多分类
  3. 决策树类模型~
  4. 最大熵模型
  5. 。。。

同时本文要说到的Softmax是一个是Logistic模型上的一个扩展,可以轻松的完成多分类任务,它是一个有监督的学习,不过可以和相当热门的神经网络可以轻松结合起来.

Logistic回顾

Logistic模型是一个非常基础而又高效的二分类模型,并且由于其最终值会归一化到0~1,因此也很多场景下也会作为回归模型使用,比如ctr预估
Logistic的输入数据是
$$\{(x^1,y^1),(x^2,y^2)…(x^m,y^m)\}$$

其中$x^i$为输入的特征向量,$y^i$即为要训练的目标,在二分类中,一般$y^i \in \{0,1\}$,则Logistic的算分函数为
$$h_{\theta}(x) = \frac{1}{1+e^{-\theta^Tx}}$$

使用最大似然法进行参数估计,其似然函数为
$$\prod h_{\theta}(x^i)^{y^i} \times (1-h_{\theta}(x^i))^{(1-y^i)}$$

对其进行负的对数转换之后则最终的损失函数为
$$ J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left [ y^i \text{log}h_{\theta}(x^i) + (1-y^i)\text{log}(1-h_{\theta}(x^i)) \right ] $$

Logistic模型中我们可以发现我们最终需要求的是$\theta$向量.

Softmax 模型

Softmax模型中,其输入也是类似向量的设计
$$\{(x^1,y^1),(x^2,y^2)…(x^m,y^m)\}$$

只是这个的$y^i \in \{1,2,…k\}$有$k$个类别,而最终要求的应该是这个值
$$P(y=k_j | x)$$
也就是类别$k_j$可能的概率,也就是会形成一个$k$维的输出
$$
h_{\theta}(x^i)=\begin{bmatrix} P(y^i=1|\theta_1,x_i)
\\ P(y^i=2|\theta_2,x_i)
\\ …
\\ P(y^i=k|\theta_k,x_i)
\end{bmatrix}
=
\frac{1}{\sum_{s=1}^k e^{\theta_s^Tx_i}}
\begin{bmatrix} e^{\theta_1^Tx_i}
\\ e^{\theta_2^Tx_i}
\\ …
\\ e^{\theta_k^Tx_i}
\end{bmatrix}
$$

则我们整个模型最终要求的是一个$\theta$矩阵(注意,在Logistic中求是一个向量),矩阵的每一行$\theta_i$其实就是与输入参数$x$相乘的向量~

注意:分子$\frac{1}{\sum_{s=1}^k e^{\theta_s^Tx_i}}$是为了让最终所有类别的概率之和为1

每个类别j的概率为:
$$p_j=\frac{e^{\theta_j^Tx}}{\sum_{s=1}^k e^{\theta_s^Tx}}$$

Softmax的损失函数

同样,Softmax使用最大似然法进行参数的估计,则似然函数为
$$\prod_i^m \prod_{j=1}^k p_j^{I\{y^i = k_j\}}$$

其中$I\{y^i = k_j\}$为二值函数,当且仅当$y^i == k_j$时为1,否则为0

对其取负的对数可以得到其损失函数:
$$J(\theta) = -\frac{1}{m} \left[ \sum_{i=1}^m \sum_{j=1}^k I\{y^i = k_j\} \text{log} p_j \right]$$

假设我们使用梯度下降法对损失函数进行优化,因此对$\theta$进行求导,在求导之前先算下面这个:
$$ \frac{\delta p_j}{\delta \theta_i}=\left\{
\begin{aligned}
\frac{\frac{e^{\theta_j^Tx}}{\delta \theta_{\color{Red} j}}\sum_{s=1}^k e^{\theta_s^Tx}-\frac{\sum_{s=1}^k e^{\theta_s^Tx}}{\delta \theta_{\color{Red} j}}e^{\theta_j^Tx}}{(\sum_{s=1}^k e^{\theta_s^Tx})^2} &= x p_j(1-p_j) & \quad if i=j \\
\frac{\frac{e^{\theta_j^Tx}}{\delta \theta_{\color{Red} i}}\sum_{s=1}^k e^{\theta_s^Tx}-\frac{\sum_{s=1}^k e^{\theta_s^Tx}}{\delta \theta_{\color{Red} i}}e^{\theta_j^Tx}}{(\sum_{s=1}^k e^{\theta_s^Tx})^2} &= x p_ip_j & \quad if i \neq j\\
\end{aligned}
\right.$$

有了上面的基础之后,我们对于$J(\theta)$进行求导,就可以得到如下的梯度:

$$\begin{equation}\begin{split} \triangledown_{\theta_j}J(\theta) &= -\frac{1}{m} \left[ \sum_{i=1}^m \sum_{j=1}^k I\{y^i = k_j\} \frac{1}{p_j} \frac{\delta p_j}{\delta \theta_j } \right]\\
&= -\frac{1}{m} \left[ \sum_{i=1}^m \left ( I\{y^i = k_i\} \frac{1}{p_i} x^i p_i(1-p_i) - \sum_{j=1,j \neq i}^k I\{y^i = k_j\} \frac{1}{p_j} x^i p_i p_j \right ) \right ] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m x^i \left ( I\{y^i = k_i\} (1-p_i) - \sum_{j=1,j \neq i}^k I\{y^i = k_j\} p_i \right ) \right ] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m x^i \left ( I\{y^i = k_{\color{Red} i}\} - I\{y^i = k_i\}p_i - \sum_{j=1,j \neq i}^k I\{y^i = k_j\} p_i \right ) \right ] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m x^i \left ( I\{y^i = k_{\color{Red} j}\} - \sum_{j=1}^k I\{y^i = k_j\} p_i \right ) \right ] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m x^i \left ( I\{y^i = k_j\} - p_i \right ) \right ]
\end{split}\end{equation}$$

注意有:

  • $\sum_{j=1}^k I\{y^i = k_j\} = 1 $ ,因为样本必定会落到一个类别上
  • 同时上面式子里面红色的${\color{Red} j}$是因为左侧分离出来,其中分离的条件是$i=j$

上面的梯度最终将会是一个向量的形式,$\frac{\delta J(\theta)}{\delta \theta_{j,l}}$表示第$j$的类别的第$l$个特征的梯度方式,有了该梯度了之后,最终可以得到如下的参数更新:
$$\theta_j = \theta_j - \alpha \triangledown_{\theta_j}J(\theta) \quad j \in \{1,…k\}$$

到了这一步,整体看到就和二分类的Logistic很像了,上面是使用梯度下降法的求解,当然还可以使用类似L-BFGS算法进行优化~
另外关于其L1L2的正则项也是可以参考Logistic

Softmax与Logistic的联系

Softmax的$k=2$时(其实就是二分类了),再来观察Softmax的一些式子

算分函数

$$\begin{equation}\begin{split} h_\theta(x^i) &= \frac{1}{e^{\theta_1^Tx_i}+e^{\theta_2^Tx_i}}
\begin{bmatrix} e^{\theta_1^Tx_i}
\\ e^{\theta_2^Tx_i}
\end{bmatrix} \\
&= \frac{1}{e^{(\theta_1-\theta_1)^Tx_i}+e^{(\theta_2-\theta_1)^Tx_i}}
\begin{bmatrix} e^{(\theta_1-\theta_1)^Tx_i}
\\ e^{(\theta_2-\theta_1)^Tx_i}
\end{bmatrix} \\
&= \begin{bmatrix} \frac{1}{1+e^{(\theta_2-\theta_1)^Tx_i}}
\\ \frac{e^{(\theta_2-\theta_1)^Tx_i}}{1+e^{(\theta_2-\theta_1)^Tx_i}}
\end{bmatrix} \\
&= \begin{bmatrix} \frac{1}{1+e^{(\theta_2-\theta_1)^Tx_i}}
\\ 1- \frac{1}{1+e^{(\theta_2-\theta_1)^Tx_i}}
\end{bmatrix} \\
\end{split}\end{equation}$$

在上面第一到第二步减去$\theta_1$任成立的原因是,Softmax的参数过多,是一个大矩阵,里面存在着冗余的参数:
$$\begin{equation}\begin{split} h_{\theta_j}(x^i) &= \frac{e^{\theta_jx^i}}{\sum_{s=1}^k e^{\theta_sx^i}} \\
&= \frac{e^{(\theta_j-\phi)x^i}}{\sum_{s=1}^k e^{(\theta_s-\phi)x^i}} \\
&= \frac{e^{\theta_jx^i}e^{-\phi x^i}}{\sum_{s=1}^k e^{\theta_sx^i}e^{-\phi x^i}} \\
&= \frac{e^{\theta_jx^i}}{\sum_{s=1}^k e^{\theta_sx^i}}
\end{split}\end{equation}$$
因此,参数矩阵中减去同一个向量并不会影响最终的优化结果~关于参数过度化问题可以参考这里

所以当$k=2$时Softmax的算分函数其实就是Logistic的变形~

损失函数

Softmax的损失函数为
$$\begin{equation}\begin{split} J(\theta) &= -\frac{1}{m} \left[ \sum_{i=1}^m \sum_{j=1}^2 I\{y^i = k_j\} \text{log} p_j \right] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m I\{y^i = k_1\} \text{log} p_1 + I\{y^i = k_2\} \text{log} p_2 \right] \\
&= -\frac{1}{m} \left[ \sum_{i=1}^m I\{y^i = k_1\} \text{log} p_1 + (1-I\{y^i = k_1\}) \text{log} (1-p_1) \right] \\
\end{split}\end{equation}$$

因为:$I\{y^i = k_1\} + I\{y^i = k_2\} =1$ 以及 $p_1+p_2=1$

最终也就变成了Logistic的损失函数形式了

总结

  1. Softmax模型其实是Logistic对于多分类上面的扩展
  2. Softmax最终产出的每一类的概率之和为1
  3. Softmax其实并不是一个损失函数(因为看到很多文章中都会很自然的写道Softmax损失函数),它自己求优化时还是使用者交叉熵的这一套

参考

  1. Softmax回归 ufldl

    文本大致组织按这个参考来的,因为它写的实在太好了,自己在造一遍轮子,以便记忆^_^

  2. Derivative of Softmax loss function

本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言

文章目录
  1. 1. Softmax 介绍
  2. 2. Logistic回顾
  3. 3. Softmax 模型
  4. 4. Softmax的损失函数
  5. 5. Softmax与Logistic的联系
    1. 5.1. 算分函数
    2. 5.2. 损失函数
  6. 6. 总结
  7. 7. 参考